﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace NestedType
{
    class Program
    {
        static void Main(string[] args)
        {
            SubTopLevel.Foo();

        }
    }

    ////例子1 NestedClass简单说明
    //public class TopLevel
    //{
    //    //默认的时候是private
    //    private static readonly int x = 100;
    //    //嵌套类默认的时候也是private的
    //    public class Nested
    //    {
    //        internal static void Foo()
    //        {
    //            Console.WriteLine(TopLevel.x);
    //        }
    //    }
    //}


    //Protected Access(我们这里的Protected是作用在类访问修饰符上的)
    public class TopLevel
    {
        protected class Nested
        {
            //我们定义了一个简单的方法来处理
            protected virtual void PrintClassTypeName()
            {
                Console.WriteLine(GetType().Name.ToString());
            }
        }
    }

    public class SubTopLevel : TopLevel
    {
        public static void Foo()
        {
            TopLevel.Nested testNested = new Nested();

            new NestedInhertClass();

        }

        protected class NestedInhertClass : TopLevel.Nested
        {
            //构造函数我们可以设置为public,然后我们可以通过构造函数来访问protected的元素
            internal NestedInhertClass()
            {
                PrintClassTypeName();
            }
            protected override void PrintClassTypeName()
            {
                base.PrintClassTypeName();
                Console.WriteLine("2" + this.GetType().Name.ToString());
            }
        }
        
    }


}
